home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / glass / glass.lha / GLASS / glammar / gg1.h < prev    next >
C/C++ Source or Header  |  1991-01-21  |  5KB  |  153 lines

  1. /*
  2.  
  3.     This file is a part of the GLAMMAR source distribution 
  4.     and therefore subjected to the copy notice below. 
  5.     
  6.     Copyright (C) 1989,1990  Eric Voss, ericv@cs.kun.nl 
  7.  
  8.     This program is free software; you can redistribute it and/or modify
  9.     it under the terms of the GNU General Public License as published by
  10.     the Free Software Foundation version 1
  11.  
  12.     This program is distributed in the hope that it will be useful,
  13.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.     GNU General Public License for more details.
  16.  
  17.     You should have received a copy of the GNU General Public License
  18.     along with this program; if not, write to the Free Software
  19.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20. */
  21. /* file constdef.h : constant definitions and macros */
  22.  
  23.   
  24. /*     !! IN CASE OF A SIMPLE MAKEFILE SPECIFY DIRECTORIES HERE !! */
  25.  
  26. #define true    1
  27. #define false   0
  28. #define nil    -2
  29. #define affixnt 0
  30. #define superaffix 1 
  31. #define metaffix 2
  32. #define adp_affix 4
  33. #define factor 8
  34. #define affixtm 16
  35. #define supernt 32 
  36. #define meta_alt 64 
  37. #define mint 128
  38. #define derived 0
  39. #define inherited 1
  40. #define lattice_affix 2
  41. #define nset         32*4   
  42. #define longset      64 *4
  43. #define plusset      128 *4
  44. #define starset     256*4
  45. #define complset    512*4
  46. #define tnode       1024 *4 
  47. #define cnode       2048 *4 
  48. #define lookahead   1  
  49. #define domemo   0  
  50. #define ntnode      0
  51. #define rnode            1
  52. #define docompile          2
  53. #define processing       4
  54. #define notemptyrule     8
  55. #define emptyrule       16
  56. #define deterministic   32
  57. #define nondeterministic   64
  58. #define leftrec            128
  59. #define notleftrec            256
  60. #define recursive            512
  61. #define notrecursive            1024
  62. #define external  4096*8 
  63. #define meta_prod_rule  4096*4
  64. #define meta_One  4
  65. #define meta_OneStar  8
  66. #define meta_Mult  16
  67. #define meta_Super  16
  68. #define meta_Mint  32
  69. #define One 4
  70. #define OneStar 8
  71. #define Mult 16
  72. #define Super 32
  73. #define Lattice  64
  74. #define Mint  164
  75.  
  76. #define affix_directed_parsing  2
  77. #define no_affix_directed_parsing  1
  78.  
  79. #define maxnt     4096*4   /* absolute maximum */ 
  80. #define MAX_CHARS  10000  
  81.  
  82. /* macros */
  83.  
  84. #define NODENAME(node)      ast[node].n
  85. #define BROTHER(node)       ast[node].b
  86. #define SON(node)           ast[node].s
  87. #define REPR(node)          ast[node].r
  88. #define DEF(node)           ast[node].d
  89. #define LEFTDEF(node)       ast[node].d
  90. #define LINE(node)          (int) ast[node].r
  91.  
  92. #define MARKED(rule,value)   ((NODENAME (rule) & (value) ) != 0)
  93. #define SET(rule,value)       (NODENAME(rule) ) |= value
  94. #define UNSET(rule,value)     (NODENAME(rule) ) &=  ~ (value )
  95.  
  96. #define MARKED_ADP(rule,value)   ((DEF(rule) & (value) ) != 0)
  97. #define SET_ADP(rule,value)       (DEF(rule) ) |= value
  98. #define UNSET_ADP(rule,value)     (DEF(rule) ) &=  ~ (value )
  99.  
  100. #define LATTICE_DEF(node)       ast[node].s
  101. #define INHERITED(node)      (ast[node].n == inherited)
  102. #define DERIVED(node)      (ast[node].n == derived)
  103. #define LATTICE(node)      (ast[node].n == lattice_affix)
  104. #define MEMOIZE(node)     (ast[node].d >= domemo )
  105. #define LKH(node)  MARKED(node,lookahead)
  106. #define NONTERMINAL(member) ((NODENAME (member) ) < 128)
  107. #define TERMINAL(member)    ((NODENAME (member)) >=  128)
  108. #define STRING(member)    ((NODENAME (member) & tnode) == tnode )
  109. #define COMPLEMENT(member)    ((NODENAME (member) & complset) == complset )
  110. #define EXCLAMATIONSTARCHOICE(member)  ((NODENAME(member) & starset) == starset)
  111. #define EXCLAMATIONPLUSCHOICE(member)  ((NODENAME(member) & plusset) == plusset)
  112.  
  113.  
  114. #define AFFIXTREE(node)       SON(node)
  115. #define AFFIXDEF(node)       NODENAME(node)
  116. #define OR +
  117. #define LASTALT(alt)         (BROTHER(alt) == nil)
  118.  
  119. #define IS_LEFTDEF(node)       (ast[node].d != -1)
  120. #define NOT_IS_LEFTDEF(node)   (ast[node].d == -1)
  121.  
  122. #define META(node)    (ast[node].n == metaffix )
  123. #define FREE_AFFIX(node)    (ast[node].n >= metaffix )
  124. #define APPLY_BOUND_AFFIX(node)    (ast[node].n <  metaffix)
  125. #define DONTCARE(node)  (ast[node].d = 9999)
  126. #define IS_DONTCARE(node)  (ast[node].d == 9999)
  127. #define ISNT_DONTCARE(node)  (ast[node].d != 9999)
  128.  
  129. #define PART(node)           ast[node].d
  130. #define SUM(node)           ast[node+1].n
  131. #define OLDSUM(node)           ast[node+1].b
  132. #define NEWSUM(node)           ast[node+1].s
  133. #define COUNT(node)           ast[node+1].d
  134.  
  135. #define SUM_ALT  sum +=   3000001
  136. #define SUM_AFX  sum +=    100022    
  137. #define SUM_MEM  sum +=     91333 
  138. #define SUM_TERM sum +=     15077
  139. #define SUM_DC   sum +=      1125
  140. #define SUM_NOLD sum +=       156
  141. #define SUM_LD   sum +=        19
  142.  
  143.  
  144.  
  145. #include <ctype.h>
  146. #include <stdio.h>
  147.  typedef
  148. struct {
  149.    int n, b, s, d;
  150.    char *r;}
  151. AST;
  152.  
  153.